package com.example.learning;

public class Learning3 {
    public static void main(String[] args) {
        /**
         * 用户线程
         */
        Thread userThread = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println("userThread : " + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("userThread:end");
        });

        /**
         * 守护线程
         */
        Thread daemonThread = new Thread(() -> {
            while (true) {
                System.out.println("daemonThread : running" + Thread.currentThread().getName());
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        /**
         * 设置为守护线程
         * - 守护线程主要用于执行后台任务，例如：垃圾回收器（GC）、JIT 编译器等。
         * - 当所有用户线程都结束后，守护线程会被强制终止，JVM 自动退出。
         * - 如果只有守护线程存在，JVM 会退出而不等待守护线程执行完成。
         */
        daemonThread.setDaemon(true);

        userThread.start();
        daemonThread.start();

        System.out.println("Main thread");

    }
}
